package log

type config struct {
	stdFile      bool
	logDir       string
	maxAge       int // 日志存活天数
	rotationSize int // 单文件日志最大大小
	level        Level
	callerSkip   int
}

type Option func(*config)

// WithLogDir 配置日志输出文件路径
func WithLogDir(logDir string) Option {
	return func(c *config) {
		c.logDir = logDir
	}
}

// WithMaxAge 日志文件的最大生存时间,单位天
// 默认30天
func WithMaxAge(d int) Option {
	return func(c *config) {
		if d > 0 {
			c.maxAge = d
		}
	}
}

// WithRotationSize 单日志文件的大小，单位兆
// 默认 100M
func WithRotationSize(s int) Option {
	return func(c *config) {
		if s < 1 {
			s = 100
		}
		c.rotationSize = s
	}
}

// WithLevel 日志级别
// 可选级别 LevelPanic LevelFatal LevelError LevelWarn LevelInfo LevelDebug
func WithLevel(level Level) Option {
	return func(c *config) {
		c.level = level
	}
}

// WithOut 日志输出位置 file or std
func WithOut(out string) Option {
	return func(c *config) {
		if out == "file" {
			c.stdFile = true
		}
	}
}

// WithCallerSkip 跳过调用者层级，日志经过包装之后需要手动设置合适的值来获取真正调用的位置
func WithCallerSkip(skip int) Option {
	return func(c *config) {
		c.callerSkip = skip
	}
}
